/**
 * 
 */
package comunicacion.vision;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import estrategia.ParametrosGlobales;

/**
 * @author IAR
 */
public final class DoraemonConfig {

	/**
	 * Nombre del archivo .properties donde se definen los par�metros del sistema de visi�n.
	 */
	private final static String FILENAME = "Parametros/DoraemonServer.properties";
	/**
	 * Puerto por el cual se reciben los datos desde el sistema de visi�n.
	 */
	public static int PORT_CLIENTE ;
	/**
	 * Largo m�ximo de mensaje recibidos desde el sistema de visi�n.
	 */
	public static int LARGO_MAX_MSG;
	/**
	 * Milisegundos por ciclo de visi�n.
	 */
	public static int MILIS_POR_CICLO_VISION;
	/**
	 * Cantidad de objetos sobre los que trabaja el sistema de visi�n.
	 */
	public static int OBJECTS;
	/**
	 * Sufijo que identifica al nombre del robot propio.
	 */
	public static int OWN_NAME_SUFIX;
	/**
	 * Prefijo de todos los nombres de objetos del entorno.
	 */
	public static String OBJ_NAME_PREFIX;
	
	static {
		try {
			loadProperties();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
		
	private static void loadProperties() throws Exception {
		Properties properties = new Properties();
	    try {
	    	InputStream is = new FileInputStream(FILENAME);
	        properties.load(is);
	    } catch (IOException e) {
	    	throw new Exception(e);
	    }
		
	    if (properties.containsKey("PORT_CLIENTE")) {
	    	PORT_CLIENTE = Integer.parseInt(properties.getProperty("PORT_CLIENTE"));
	    } else {
	    	throw new Exception();
	    }
	    if (properties.containsKey("LARGO_MAX_MSG")) {
	    	LARGO_MAX_MSG = Integer.parseInt(properties.getProperty("LARGO_MAX_MSG"));
	    } else {
	    	throw new Exception();
	    }
	    if (properties.containsKey("MILIS_POR_CICLO_VISION")) {
	    	MILIS_POR_CICLO_VISION = Integer.parseInt(properties.getProperty("MILIS_POR_CICLO_VISION"));
	    } else {
	    	throw new Exception();
	    }
	    
	    Properties propiedadesObjetos = new Properties();
	    try {
	    	InputStream is = new FileInputStream(ParametrosGlobales.NOMBRE_ARCHIVO_CLASIFICACION_OBJETOS);
	    	propiedadesObjetos.load(is);
	    } catch (IOException e) {
	    	throw new Exception(e);
	    }
	    
	    if (propiedadesObjetos.containsKey("CANTIDAD_OBJETOS")) {
	    	OBJECTS = Integer.parseInt(propiedadesObjetos.getProperty("CANTIDAD_OBJETOS"));
	    } else {
	    	throw new Exception("Falta CANTIDAD_OBJETOS para Doraemon");
	    }
	    
	    if (propiedadesObjetos.containsKey("MI_ROBOT")) {
	    	OWN_NAME_SUFIX = Integer.parseInt(propiedadesObjetos.getProperty("MI_ROBOT"));
	    } else {
	    	throw new Exception("Falta MI_ROBOT para Doraemon");
	    }
	    
	    if (properties.containsKey("OBJ_NAME_PREFIX")) {
	    	OBJ_NAME_PREFIX = properties.getProperty("OBJ_NAME_PREFIX");
	    } else {
	    	throw new Exception();
	    }
	}
}
